Snowflakeのアカウント全体のクレジット使用状況を確認できるACCOUNT_USAGEのview2種類を試してみた #SnowflakeDB
※本エントリは、Snowflakeをもっと使いこなそう! Advent Calendar 2022の17日目の記事となります。
さがらです。
Snowflakeのアカウント全体のクレジット使用状況を確認できるACCOUNT_USAGEのview2種類を試してみたので、その内容をまとめてみます。
本記事で試す2種類のview
本記事では、以下の2種類のアカウント全体のクレジット使用状況を確認できるviewを試します。
- METERING_DAILY_HISTORY
- METERING_HISTORY
その他のACCOUNT_USAGEスキーマから参照できるview
SNOWFLAKE
データベースのACCOUNT_USAGE
スキーマに格納されているviewの一覧については、こちらの公式Docにまとまっております。
特に、本記事では触れていませんが、以下のviewでも各ウェアハウス・各サーバーレス機能・各クラウドサービスのクレジット情報を確認することが可能です。もし各機能ごとに個別にクレジットの使用状況を知りたい場合には、こちらも参考にしてみてください。
- AUTOMATIC_CLUSTERING_HISTORY
- 自動クラスタリングに使用されたクレジットをテーブルごとに確認可能
- DATABASE_REPLICATION_USAGE_HISTORY
- データベースのレプリケーションに関する使用されたクレジットをデータベースごとに確認可能
- MATERIALIZED_VIEW_REFRESH_HISTORY
- マテリアライズドビューの更新に使用されたクレジットを、各マテリアライズドビューごとに確認可能
- PIPE_USAGE_HISTORY
- Snowpipeでの継続的なデータロードにて使用されたクレジットを、各PIPEオブジェクトごとに確認可能
- QUERY_ACCELERATION_HISTORY
- 一時的にウェアハウスのリソースを増強できるQuery Accelerationにて使用されたクレジットを、各ウェアハウスごとに確認可能
- REPLICATION_GROUP_USAGE_HISTORY
- アカウントレプリケーションで使用されたクレジットを、定めたREPLICATION GROUPごとに確認可能
- SEARCH_OPTIMIZATION_HISTORY
- 検索最適化サービスで使用されたクレジットを、各テーブルごとに確認可能
- SERVERLESS_TASK_HISTORY
- サーバーレスタスクで使用されたクレジットを、各タスクごとに確認可能
- WAREHOUSE_METERING_HISTORY
- ウェアハウスが稼働して使用されたクレジットを、各ウェアハウスごとに確認可能
事前準備
SnowflakeのアカウントはタイムゾーンのデフォルトがAmerica/Los_Angeles(UTC -8:00)
で正直使いづらいため、アカウントレベルでタイムゾーンをUTC
に変更しておきます。
use role accountadmin; alter account set timezone = 'UTC';
このタイムゾーンを変更しておくことで、本記事で確認するMETERING_HISTORYのSTART_TIME
列がEND_TIME
列がUTCでの表記となるため、使いやすくなると思います。
METERING_DAILY_HISTORY
まずは、METERING_DAILY_HISTORYについて見ていきます。
どんなデータが入っているかを見るため、以下のクエリを実行します。
use role accountadmin; select * from snowflake.account_usage.metering_daily_history order by usage_date desc;
SERVICE_TYPE
列で「WAREHOUSE_METERTING」や「QUERY_ACCELERATION」など、どの機能・サービスでのクレジット使用かがわかり、USAGE_DATE
には該当する日付が入っています。
また、実際に消費されるクレジットは、「クラウドサービスでのクレジット使用量」と「ウェアハウスでのクレジット使用量の10%」多いほうで計算される仕様のため、その調整をCREDITS_ADJUSTMENT_CLOUD_SERVICES
列で行い、実際に消費されるクレジットはCREDITS_BILLED
列に表示されます。(クラウドサービス周りの請求の仕様に関しては、公式Docも併せてご覧ください。)
METERING_HISTORY
続いて、METERING_HISTORYについて見ていきます。
どんなデータが入っているかを見るため、以下のクエリを実行します。
use role accountadmin; select * from snowflake.account_usage.metering_history order by start_time desc;
SERVICE_TYPE
列があるのはMETERING_DAILY_HISTORYと同じなのですが、こちらはSTART_TIME
とEND_TIME
に分けて、1時間毎のクレジット使用状況を記録しています。
また、NAME
列では各機能・サービスでの実際のオブジェクト名が記載されており、オブジェクトレベルで消費クレジットを確認することが可能です。
あとは、クラウドサービスに関する消費クレジットもCREDITS_USED_CLOUD_SERVICES
として記録されているのですが、METERING_DAILY_HISTORYと違い、消費クレジットの調整に関する情報はありません。(日次のクレジット消費量から調整している仕様だからですね。)
また、BYTES
、ROWS
、FILES
といった列では、Query Acceleration、自動クラスタリング、Snowpipe、などの機能に関連するレコードの場合、データが入ってきます。(添付図ではQuery Accelerationに関するデータが入っています。)
METERING_DAILY_HISTORYとMETERING_HISTORYの使い分け
ではここで、METERING_DAILY_HISTORYとMETERING_HISTORYの使い分けについて考えてみます。
まず、METERING_DAILY_HISTORYですが、クラウドサービスの利用費用との調整も含め、日毎に使用されたクレジットの総量がCREDITS_BILLED
列に記載されているため、アカウントを通して消費したクレジットを正しく管理したい場合には、METERING_DAILY_HISTORYを使用するのが良いと思います。
一方で、METERING_HISTORYですが、こちらはNAME
列に実際にクレジットを使用しているオブジェクト名が登録されており、各機能・サービスレベルよりも一つ下のオブジェクトレベルでクレジットの使用状況を確認できます。また、METERING_DAILY_HISTORYと違い時間単位で消費クレジットが記録されているため、各オブジェクトレベルで、どの時間帯にどれだけのクレジットが使用されているのかを確認したい場合には、METERING_HISTORYを使用するのが良いと思います。
最後に
Snowflakeのアカウント全体のクレジット使用状況を確認できるACCOUNT_USAGEのview2種類を試してみました。
どちらも汎用性が高く使えるviewだと思いますので、ぜひ活用してください!